package com.tmsb.bigscreen.config;

import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import javax.sql.DataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;

/**
 *Description:
 * 注解 MapperScan 指定那些包下的 mapper 使用本数据源，并指定使用哪个SqlSessionFactory，注意，此处的 sqlSessionFactoryRef 即本配置中的注入的 SqlSessionFactory。
 * 设置指定的数据源，此处是名为 master 的数据源，使用 Qualifier 指定。
 * MyBatis Plus 对应的 Mapper 若有自定义的 mapper.xml， 则使用 setMapperLocations 指定。
 * 若需要对实体进行别名处理，则使用 setTypeAliasesPackage 指定。
 *Version:1.0.0
 *@author shihb
 *@date 2020/6/30 18:24
 */

@Configuration
@MapperScan(basePackages = "com.tmsb.bigscreen.mapper.mysql", sqlSessionFactoryRef = "mysqlSqlSessionFactory")
public class MySqlMybatisConfig {
  /**
   * 注意，此处需要使用MybatisSqlSessionFactoryBean，不是SqlSessionFactoryBean，
   * 否则，使用mybatis-plus的内置函数时就会报invalid bound statement (not found)异常
   */
  @Bean("mysqlSqlSessionFactory")
  public SqlSessionFactory mysqlSqlSessionFactory(@Qualifier("mysqlDataSource") DataSource dataSource) throws Exception {
    // 设置数据源
    MybatisSqlSessionFactoryBean mybatisSqlSessionFactoryBean = new MybatisSqlSessionFactoryBean();
    mybatisSqlSessionFactoryBean.setDataSource(dataSource);
    //mapper的xml文件位置
    PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
    String locationPattern = "classpath*:/mapper/mysql/*.xml";
    mybatisSqlSessionFactoryBean.setMapperLocations(resolver.getResources(locationPattern));
    //对应数据库的entity位置
    String typeAliasesPackage = "com.tmsb.bigscreen.entity.mysql";
    mybatisSqlSessionFactoryBean.setTypeAliasesPackage(typeAliasesPackage);
    return mybatisSqlSessionFactoryBean.getObject();
  }
}
